package com.blog.cmrpersonalblog.controller;

import cn.dev33.satoken.annotation.SaCheckRole;
import com.blog.cmrpersonalblog.common.Result;
import com.blog.cmrpersonalblog.dto.dashboard.DashboardResponse;
import com.blog.cmrpersonalblog.service.DashboardService;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

/**
 * 仪表盘控制器
 * 提供后台管理首页仪表盘数据
 */
@Slf4j
@RestController
@RequestMapping("/admin/dashboard")
@CrossOrigin(origins = "*", maxAge = 3600)
@SaCheckRole("admin")
public class DashboardController {

   @Resource
    private DashboardService dashboardService;

    /**
     * 获取仪表盘数据
     * 包含今日新增统计、平台活跃度、内容增长趋势等数据
     */
    @GetMapping("/data")
    public Result<DashboardResponse> getDashboardData() {
        log.info("管理员获取仪表盘数据");
        try {
            DashboardResponse dashboardData = dashboardService.getDashboardData();
            return Result.success("获取仪表盘数据成功", dashboardData);
        } catch (Exception e) {
            log.error("获取仪表盘数据失败", e);
            return Result.error("获取仪表盘数据失败：" + e.getMessage());
        }
    }

    /**
     * 获取今日新增统计数据
     */
    @GetMapping("/today-stats")
    public Result<DashboardResponse.TodayStats> getTodayStats() {
        log.info("管理员获取今日新增统计数据");
        try {
            DashboardResponse.TodayStats todayStats = dashboardService.getTodayStats();
            return Result.success("获取今日新增统计数据成功", todayStats);
        } catch (Exception e) {
            log.error("获取今日新增统计数据失败", e);
            return Result.error("获取今日新增统计数据失败：" + e.getMessage());
        }
    }

    /**
     * 获取平台活跃度统计数据
     */
    @GetMapping("/activity-stats")
    public Result<DashboardResponse.ActivityStats> getActivityStats() {
        log.info("管理员获取平台活跃度统计数据");
        try {
            DashboardResponse.ActivityStats activityStats = dashboardService.getActivityStats();
            return Result.success("获取平台活跃度统计数据成功", activityStats);
        } catch (Exception e) {
            log.error("获取平台活跃度统计数据失败", e);
            return Result.error("获取平台活跃度统计数据失败：" + e.getMessage());
        }
    }

    /**
     * 获取内容增长趋势统计数据（近7天）
     */
    @GetMapping("/growth-trend-stats")
    public Result<DashboardResponse.GrowthTrendStats> getGrowthTrendStats() {
        log.info("管理员获取内容增长趋势统计数据");
        try {
            DashboardResponse.GrowthTrendStats growthTrendStats = dashboardService.getGrowthTrendStats();
            return Result.success("获取内容增长趋势统计数据成功", growthTrendStats);
        } catch (Exception e) {
            log.error("获取内容增长趋势统计数据失败", e);
            return Result.error("获取内容增长趋势统计数据失败：" + e.getMessage());
        }
    }

    /**
     * 测试单个统计查询（用于调试）
     */
    @GetMapping("/test-stats")
    public Result<String> testStats() {
        log.info("测试统计查询");
        try {
            // 测试今日新增统计
            DashboardResponse.TodayStats todayStats = dashboardService.getTodayStats();
            log.info("今日统计测试成功: 用户={}, 文章={}, 评论={}",
                todayStats.getNewUsers(), todayStats.getNewArticles(), todayStats.getNewComments());

            return Result.success("统计查询测试成功", "今日新增: 用户=" + todayStats.getNewUsers() +
                ", 文章=" + todayStats.getNewArticles() + ", 评论=" + todayStats.getNewComments());
        } catch (Exception e) {
            log.error("统计查询测试失败", e);
            return Result.error("统计查询测试失败：" + e.getMessage());
        }
    }
}